home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
- #
- # ec2-cost: approximate EC2 cost (USD) of the current instance
- # Copyright (C) 2008 Canonical Ltd.
- #
- # Authors: Dustin Kirkland <kirkland@canonical.com>
- #
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, version 3 of the License.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- FORCE=0
- DETAIL=0
-
- # Default is "off"
- p="ec2-cost"
- grep -qs "^$p=1$" "$HOME/.screen-profiles/status" && FORCE=1
- grep -qs "^$p=0$" "$HOME/.screen-profiles/status" && FORCE=0
-
- for arg in $@; do
- case "$arg" in
- -f|--force)
- FORCE=1
- ;;
- -d|--detail)
- DETAIL=1
- ;;
- esac
- done
-
- # Exit immediately if this is not an Amazon EC2 instance, we're not
- # manually turned on, and we're not in force mode
- [ -r "/etc/ec2-version" -o -r "$HOME/.screen-profiles/ec2-cost" -o "$FORCE" = "1" ]
- [ "$?" = "0" ] || exit 0
-
- # Approximate Instance Cost Basis
- # US Europe
- # Small (1cpu, 32bit) $0.10/h $0.11/h
- # Medium (2cpu, 32bit) $0.20/h $0.22/h
- # Large (4cpu, 64bit) $0.40/h $0.44/h
- # XLarge (8cpu, 64bit) $0.80/h $0.88/h
-
- # Count CPUs
- cpu_count=`grep -c "^processor.*:" /proc/cpuinfo`
- [ -z "$cpu_count" ] && cpu_count=1
- # Apply the going rate
- CPU_RATE=`echo "$cpu_count" | awk '{printf "%f", 0.10*$1}'`
- # BUG: Some logic needed here to add 10% cost for Europe instances?
-
- # Data Transfer Cost Basis
- # Incoming $0.10/GB
- # Outgoing $0.17/GB
- # (This gets more complex if you use >1TB/mo)
- RX_RATE="0.10"
- TX_RATE="0.17"
-
- # Auto detect network interface
- IF=`route -n | grep "0\.0\.0\.0" | tail -n1 | awk '{print $8}'`
-
- # Calculate bandwidth cost
- tx_gb=`/sbin/ifconfig "$IF" | grep "TX bytes:" | sed "s/^.*TX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
- rx_gb=`/sbin/ifconfig "$IF" | grep "RX bytes:" | sed "s/^.*RX bytes://" | awk '{ printf "%f", $1 / 1024 / 1024 / 1024 }'`
- network_cost=`echo "$tx_gb" "$TX_RATE" "$rx_gb" "$RX_RATE" | awk '{printf "%f %f", $1*$2, $3*$4}' | awk '{printf "%f", $1 + $2}'`
-
- # Calculate uptime cost
- # BUG: This will only calculate uptime since boot!
- # Some additional input will be required to account for reboots!!!
- hours=`awk '{printf "%f", 1 + $1 / 60 / 60 }' /proc/uptime | sed 's/\..*$//' `
- uptime_cost=`echo "$hours" | awk "{printf \"%f\", "$CPU_RATE" * $hours}"`
- total_cost=`echo "$network_cost" "$uptime_cost" | awk '{printf "~\$%.2f", $1 + $2}'`
-
- if [ "$DETAIL" = "1" ]; then
- echo
- echo "================================================"
- echo "Estimated cost in Amazon's EC2 since last reboot"
- echo "================================================"
- echo " Network sent: $tx_gb GB @ \$$RX_RATE/GB"
- echo " Network recv: $rx_gb GB @ \$$TX_RATE/GB"
- echo " Network cost: \$$network_cost"
- echo "------------------------------------------------"
- echo " Uptime: $hours hr @ \$$CPU_RATE/hr"
- echo " Uptime cost: \$$uptime_cost"
- echo "------------------------------------------------"
- echo "Total cost: $total_cost"
- echo "================================================"
- echo
- exit 0
- fi
-
- printf "\005{= wg}%s\005{-} " $total_cost
-